import java.util.Arrays;
import java.util.Comparator;

/**
 * @Author ZhangCuirong
 * @Date 2025/7/29 15:11
 * @description: 赛马问题/洗牌问题
 * 给定两个长度相等的数组 nums1 和 nums2，nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。
 * <p>
 * 返回 nums1 的 任意 排列，使其相对于 nums2 的优势最大化。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：nums1 = [2,7,11,15], nums2 = [1,10,4,11]
 * 输出：[2,11,7,15]
 * 示例 2：
 * <p>
 * 输入：nums1 = [12,24,8,32], nums2 = [13,25,32,11]
 * 输出：[24,32,8,12]
 */
public class Solution870 {
    public int[] advantageCount(int[] nums1, int[] nums2) {
        Integer[] index1 = new Integer[nums1.length];
        Integer[] index2 = new Integer[nums2.length];
        int[] res = new int[nums1.length];
        for (int i = 0; i < nums1.length; i++) {
            index1[i] = i;
            index2[i] = i;

        }
        Arrays.sort(index1, new Comparator<Integer>() {
            @Override
            public int compare(Integer i, Integer j) {
                return nums1[i] - nums1[j];
            }
        });
        Arrays.sort(index2, new Comparator<Integer>() {
            @Override
            public int compare(Integer i, Integer j) {
                return nums2[i] - nums2[j];
            }
        });
        int left = 0;
        int right = nums2.length - 1;
        for (int i = 0; i < nums1.length; i++) {
            if (nums1[index1[i]] > nums2[index2[left]]) {
                res[index2[left]] = nums1[index1[i]];
                left++;
            } else {
                res[index2[right]] = nums1[index1[i]];
                right--;
            }

        }
        return res;
    }

    public static void main(String[] args) {
        int[] nums1 = {2, 7, 11, 15};
        int[] nums2 = {1, 10, 4, 11};
        Solution870 solution = new Solution870();
        System.out.println(Arrays.toString(solution.advantageCount(nums1, nums2)));
    }
}
